package edu.qd.learn.newchapter.chapter03.reflect;

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

/**
 * 反射测试类
 *
 * @author 布衣
 */
public class DemoReflect {

    public static void main(String[] args) {
        String path = "edu.qd.learn.newchapter.chapter03.reflect.Farmer";

        try {

            Class c = Class.forName(path);

            Object obj = c.newInstance();
            //调setter
            Method m1 = c.getMethod("setName",String.class);
            m1.invoke(obj,"张三");

            //getter取值
            Method m2 = c.getMethod("getName");
            Object x = m2.invoke(obj);
            System.out.println(x);

        } catch (ClassNotFoundException | NoSuchMethodException | InstantiationException | IllegalAccessException |
                 InvocationTargetException e) {
            throw new RuntimeException(e);
        }
    }



//    public static void main(String[] args) {
//        //class : 反射类   ： 表示正在运行的一个类或者接口等
//        try {
//            //
//            Class c = Class.forName("edu.qd.learn.newchapter.chapter03.reflect.Farmer");
//
//            Object fs = c.newInstance();
//
//            //根据指定的字段名，获取字段对象
//            Field name = c.getDeclaredField("name");
//
//            //field : 字段 -- 描述类中的成员变量
//            Field[] f1 = c.getDeclaredFields();
//            for (Field field : f1) {
//
//                //private
//                field.setAccessible(true);
//                //字段的类型
//                Class type = field.getType();
////                System.out.println("字段名=" + field.getName() + ";类型为=" + type.getName());
//                if (type.getName().equals("java.lang.String")) {
//                    field.set(fs, "ttt");
//                } else if (type.getName().equals("int")) {
//                    field.set(fs, 40);
//                }
//                System.out.println("关联对象名称=" + c.getName() + "字段名" + field.getName() + "字段的值 =" + field.get(fs));
//                field.setAccessible(false);
//            }
//
//        } catch (ClassNotFoundException | IllegalAccessException | InstantiationException | NoSuchFieldException e) {
//            throw new RuntimeException(e);
//        }
//    }

}
